import Vue from 'vue'
import Vuex, { Store } from 'vuex'

Vue.use(Vuex)

export default new Store({
  state: {
    // 防止第一次取不到值的时候  
    car: JSON.parse(localStorage.getItem('car') || '[]')
  },
  getters: {
    getAllCount(state) {
      let c = 0
      state.car.forEach(item => {
        c += item.count
      })
      return c
    },
    getAllPrice(state) {
      var o = {
        // 数量
        count: 0,
        // 单价
        allPrice: 0
      }
      state.car.forEach(item => {
        if (item.selected === true) {
          o.count += item.count
          o.allPrice += item.sell_price * item.count
        }
      })
      return o
    }
  },
  mutations: {   // mutations 里面 是同步的 
    // state 仓库里面的全局数据  goodsinfo 传递过来的数据 
    addToCart(state, goodsinfo) {
      // 分析：
      // 1. 如果购物车中，之前就已经有这个对应的商品了，那么，只需要更新数量
      // 2. 如果没有，则直接把 商品数据，push 到 car 中即可
      // console.log(goodsinfo)
      // 假设 在购物车中，没有找到对应的商品
      var flag = false
      // 如果购物车中已经存在该商品，商品数量 count + 1
      state.car.some(item => {
        if (item.id === goodsinfo.id) {
          item.count += parseInt(goodsinfo.count)
          flag = true
          return true
        }
      })

      // 如果最终，循环完毕，得到的 flag 还是 false，则把商品数据直接 push 到 购物车中
      if (!flag) {
        state.car.push(goodsinfo)
      }

      localStorage.setItem('car', JSON.stringify(state.car))
      // console.log(state.car)

    }
  },
  actions: {   // actions 是异步的 可以发送ajax  
    addToCart({ commit }, goodsinfo) {
      commit('addToCart', goodsinfo)
    }
  }
})